home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Games of Daze
/
Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso
/
x2ftp
/
msdos
/
iguana
/
incosrc
/
incosrc.exe
/
MIRRBALL
/
PATH
/
MATRIX.PAS
next >
Wrap
Pascal/Delphi Source File
|
1993-06-18
|
2KB
|
82 lines
UNIT Matrix;
INTERFACE
TYPE
Matrix4x4 = ARRAY [1..4,1..4] OF DOUBLE;
Matrix3x3 = ARRAY [1..3,1..3] OF DOUBLE;
Column4 = ARRAY [1..4] OF DOUBLE;
FUNCTION Determinante3(VAR m : Matrix3x3): DOUBLE;
FUNCTION Determinante4(VAR m : Matrix4x4): DOUBLE;
PROCEDURE PrepareMatrix(VAR mdest : Matrix4x4;
VAR m : Matrix4x4; VAR c : Column4;
i : INTEGER);
{ -------------------------------------- }
IMPLEMENTATION
FUNCTION Determinante3(VAR m : Matrix3x3): DOUBLE;
VAR
a : DOUBLE;
BEGIN
a := 0;
a := a + m[1,1]*m[2,2]*m[3,3];
a := a + m[2,1]*m[3,2]*m[1,3];
a := a + m[3,1]*m[1,2]*m[2,3];
a := a - m[3,1]*m[2,2]*m[1,3];
a := a - m[2,1]*m[1,2]*m[3,3];
a := a - m[1,1]*m[2,3]*m[3,2];
Determinante3 := a
END;
FUNCTION Determinante4(VAR m : Matrix4x4): DOUBLE;
VAR
i,j,k,l : INTEGER;
m1 : Matrix3x3;
r, d : DOUBLE;
sign : INTEGER;
BEGIN
{ FOR i := 1 TO 4 DO
WriteLn(m[1,i]:10, ' ',m[2,i]:10, ' ',m[3,i]:10, ' ',m[4,i]:10);
WriteLn;
}
r := 0;
sign := 1;
FOR i := 1 TO 4 DO BEGIN
l := 1;
FOR j := 1 TO 3 DO BEGIN
IF j = i THEN
INC(l);
FOR k := 1 TO 3 DO
m1[j,k] := m[l,k+1];
INC(l)
END;
d := Determinante3(m1);
r := r + sign*m[i,1]*d;
sign := -sign
END;
Determinante4 := r
END;
PROCEDURE PrepareMatrix(VAR mdest : Matrix4x4;
VAR m : Matrix4x4; VAR c : Column4;
i : INTEGER);
VAR
j : INTEGER;
BEGIN
mdest := m;
FOR j := 1 TO 4 DO
mdest[i, j] := c[j]
END;
END.